package com.irain.pp.account.service.mgmt;

import com.irain.pp.account.repository.enums.AccountType;
import com.irain.pp.tool.annotation.NotNull;
import com.irain.pp.tool.mybatis.dto.Statistic;
import com.irain.pp.tool.mybatis.mgmt.BaseManager;
import com.irain.pp.account.repository.model.PpUserDO;
import org.springframework.transaction.annotation.Transactional;
import tk.mybatis.mapper.entity.Example;

/**
 * @author WangYanPeng
 * @date 2017/10/19 13:24
 */

public interface PpUserManager extends BaseManager<PpUserDO> {


    /**
     * 获取用户信息
     * @param accountType 账号类型
     * @param accountValue 账号名称
     * @return
     */
    PpUserDO get(@NotNull AccountType accountType, @NotNull String accountValue);

    /**
     * 创建用户
     * @param accountType 账号类型
     * @param accountValue 账号名称
     * @param passwordHash 密码hash值
     * @return 更新后用户信息
     */
    @NotNull
    @Transactional
    PpUserDO create(@NotNull AccountType accountType, @NotNull String accountValue, String passwordHash);


    /**
     * 修改密码
     * @param id 用户id
     * @param passwordHash 新密码hash值
     * @return 更新后用户信息
     */
    @NotNull
    @Transactional
    PpUserDO replayPassword(@NotNull Long id, @NotNull String passwordHash);



    /*---------------- index userName ------------------*/


    /**
     * 完善账户信息
     * @param id 用户id
     * @param userName 用户名称
     * @param passwordHash 新密码hash值
     * @return 更新后用户信息
     */
    @NotNull
    @Transactional
    PpUserDO perfectUserName(@NotNull Long id, @NotNull String userName, String passwordHash);

     /*----------------- end userName ------------------*/




    /*---------------- index mobile -------------------*/


    /**
     * 绑定手机
     * @param id 用户id
     * @param mobile 手机号
     * @return 更新后用户信息
     */
    @NotNull PpUserDO bindMobile(@NotNull Long id, @NotNull String mobile);

    /**
     * 解绑手机
     * @param id 用户id
     * @param mobile 手机号
     * @return 更新后用户信息
     */
    @NotNull PpUserDO unbindMobile(@NotNull Long id, @NotNull String mobile);

    /**
     * 换绑手机号
     * @param id 用户id
     * @param oldMobile 旧手机号
     * @param newMobile 新手机号
     * @return 更新后用户信息
     */
    @NotNull PpUserDO replaceMobile(@NotNull Long id,@NotNull String oldMobile,@NotNull String newMobile);


    /*-------------- end mobile ---------------*/

}
